package com.koron.operation.util;

import cn.hutool.core.util.StrUtil;
import com.koron.operation.startlog.bean.StartLogCheckBean;
import com.koron.operation.startlog.enums.StartLogConfirmEnum;

import static com.koron.operation.startlog.enums.StartLogEnum.*;

public class StarLogUntil {


    /**
     * 检查 更新或插入时间是否 符合规范
     * 已经开机器不能再开机
     * 已经停机机、跳机不能再停机、跳机
     *
     * @param dtoOpt   将要更新的操作类型
     * @param beforOpt 之前的操作类型
     * @param afterOpt 之后的操作类型
     * @return
     */
    public static StartLogCheckBean checkOpt(String dtoOpt, String beforOpt, String afterOpt) {

        if (dtoOpt.equals(START_UP.getStr())) {
            if (beforOpt != null && beforOpt.equals(START_UP.getStr())) {
                return StartLogCheckBean.create(false, "当前时间，设备已经开机");
            }
            if (afterOpt != null && afterOpt.equals(START_UP.getStr())) {
                return StartLogCheckBean.create(false, "当前时间，设备已经开机");
            }
        }

        if (StrUtil.equalsAny(dtoOpt, SHUT_DOWN.getStr(), BREAKDOWN.getStr(), ACCIDENT.getStr())) {
            if (beforOpt != null) {
                if (StrUtil.equalsAny(beforOpt, SHUT_DOWN.getStr(), BREAKDOWN.getStr(), ACCIDENT.getStr())) {
                    return StartLogCheckBean.create(false, "当前时间，设备已经停机");
                }
            }
            if (afterOpt != null) {
                if (StrUtil.equalsAny(afterOpt, SHUT_DOWN.getStr(), BREAKDOWN.getStr(), ACCIDENT.getStr())) {
                    return StartLogCheckBean.create(false, "当前时间，设备已经停机");
                }
            }
        }

        return StartLogCheckBean.create(true, "");
    }


    /**
     * 监控系统： 停机成功,开机成功,停机不成功,事故跳机0,事故停机0,故障停机0,开机不成功,
     * eam系统： SHUT_DOWN,START_UP,DOWN_FAIL,ACCIDENT,BREAKDOWN,START_FAIL
     *
     * @return
     */
    public static String ConverOperType(String oper) {

        if (oper.equals("开机成功")) {
            return START_UP.getStr();
        }

        if (oper.equals("开机不成功")) {
            return START_FAIL.getStr();
        }

        if (oper.equals("停机成功")) {
            return SHUT_DOWN.getStr();
        }

        if (oper.equals("停机不成功")) {
            return DOWN_FAIL.getStr();
        }

        if (oper.equals("故障停机0")) {
            return BREAKDOWN.getStr();
        }

        if (StrUtil.equalsAny(oper, "事故跳机0", "事故停机0")) {
            return ACCIDENT.getStr();
        }

        return oper;
    }

    /**
     * 检查是否异常
     *
     * @param nowtype
     * @param beforType
     * @return
     */
    public static Boolean checkIsErr(String nowtype, String beforType) {

        if (StrUtil.isBlank(beforType)) {
            return false;
        }

        if (nowtype.equals(beforType)) {
            return true;
        }

        //已经开机成功 不能 开机不成功
        if (beforType.equals(START_UP.getStr())) {
            if (nowtype.equals(START_FAIL.getStr())) {
                return true;
            }
        }

        //已经开机不成功 不能 停机、停机不成功、故障、跳机
        if (beforType.equals(START_FAIL.getStr())) {
            if (StrUtil.equalsAny(nowtype, SHUT_DOWN.getStr(), DOWN_FAIL.getStr(), BREAKDOWN.getStr(), ACCIDENT.getStr())) {
                return true;
            }
        }

        //已经 停机成功、故障、跳机 不能 （停机成功、故障、跳机、停机失败）
        if (StrUtil.equalsAny(beforType, SHUT_DOWN.getStr(), BREAKDOWN.getStr(), ACCIDENT.getStr())) {
            if (StrUtil.equalsAny(nowtype, SHUT_DOWN.getStr(), BREAKDOWN.getStr(), ACCIDENT.getStr(), DOWN_FAIL.getStr())) {
                return true;
            }
        }

        return false;
    }


    /**
     * 确认状态转换
     * @param isconfirm 是否确认    0未确认 1已确认 2待批复
     * @param isTest    是否试机    true是 false不是
     * @return
     */
    public static String convenIsConfirm(Integer isconfirm, Boolean isTest) {

        if (isTest) {
            return StartLogConfirmEnum.Test.getKey();
        }

        if (isconfirm == StartLogConfirmEnum.Hit.getValue()) {
            return StartLogConfirmEnum.Hit.getKey();
        }
        if (isconfirm == StartLogConfirmEnum.Miss.getValue()) {
            return StartLogConfirmEnum.Hit.getKey();
        }
        if (isconfirm == StartLogConfirmEnum.Wair.getValue()) {
            return StartLogConfirmEnum.Hit.getKey();
        }
        return "";
    }


    /**
     * 监控系统数据自动 判断 计划内外
     * 开机成功、开机不成功、停机成功 判断计划内
     * 故障停机、事故跳机 判断计划外
     * @param type
     * @return
     */
    public static Integer inplanConfig(String type){

        if(StrUtil.equalsAny(type, START_UP.getStr(), START_FAIL.getStr(), SHUT_DOWN.getStr())){
            return Integer.valueOf(1);
        }

        if(StrUtil.equalsAny(type, BREAKDOWN.getStr(), ACCIDENT.getStr())){
            return Integer.valueOf(0);
        }

        return null;
    }

}

